package proyectoX.src.armas;

import java.awt.Point;

import proyectoX.src.aplicacion.Nivel;

/**
 * Clase abstracta que representa a un arma que dispara municiones.
 *
 */
public abstract class arma {
		
	//Atributos
	protected Nivel nivel;
	protected int municiones;
	protected int danio;
	
 	protected long tiempoUltimoDisparo;
	protected long delay;

	/**
	 * Crea un nuevo objeto de tipo arma. 
	 * @param municiones Cantidad de municiones.
	 * @param danio Daño que efectúa una munición disparada por el arma.
	 * @param n El nivel actual.
	 * @param del Delay entre cada disparo.
	 */
	protected arma(int municiones, int danio,Nivel n, long del){
		nivel=n;
		this.municiones=municiones;
		this.danio=danio;
		tiempoUltimoDisparo = 0;
		delay = del;
	}


	
	/**
	 * Método abstracto para disparar el arma y crear municiones.
	 * El parámetro location suele corresponder a la ubicación actual de la nave jugadora.
	 * @param location
	 */
	public abstract void disparar(Point location);

	/**
	 * Devuelve el daño producido por una munición disparada por éste arma.
	 * @return El daño generado.
	 */
	public int getDanio(){
		return danio;
	}

	/**
	 * Devuelve el nivel referenciado por el arma.
	 * @return El nivel del atributo.
	 */
	public Nivel getNivel() {
		return nivel;
	}

	/**
	 * Devuelve la cantidad de municiones actuales.
	 * @return La cantidad de municiones.
	 */
	public int getMuniciones(){
		return municiones;
	}

	/**
	 * Establece la cantidad de municiones pasada por parámetro.
	 * @param i Cantidad de municiones.
	 */
	public void setMuniciones(int i){
		municiones=i;
	}
	
	/**
	 * Devuelve verdadero si ya pasó el tiempo de delay entre el último disparo y el tiempo actual y falso
	 * en caso contrario. 
	 * @return Verdadero si pasó el delay, falso en caso contrario.
	 */
	public boolean pasoDelay() {
		return (System.currentTimeMillis() - tiempoUltimoDisparo >= delay);
	}
}
